import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.ArrayList;
/**
 * Esta clase contiene los movimientos del jugador
 * 
 * @author Araujo Lara Zahaira Lorena
 * @version 2012
 */
public class chavo extends Personaje
{
    private GreenfootImage[] imagen= new GreenfootImage[7];//Arreglo de imagenes de movimientos de jugador
    private boolean band=false;//Bandera si es falsa puede moverse de izquierda a derecha el jugador si es verdadera no se puede mover hasta termina un tiempo determinado
    private boolean band2=false;//Bandera si es verdadera el jugador no puede tirar trampas si es falsa y termino el tiempo de congelacion podra tirar trampas
    private boolean band3=false;//Bandera de inicio o termino de movimientos de este objeto 
    private int quitaLet=0;//Esta variable global se utiliza para indicar el estado del letreo de tiempo
    

    private Tiempo t= new Tiempo(1,3);//Tiempo de congelacion cuando choca con algun objeto
    private Tiempo t2= new Tiempo(5,5);//Tiempo de espera para tirar trampa
  

      /**
   * Metodo que indica el comportamiento del objeto
 */     
    public void act() 
    { 
        Mundo mundo=(Mundo)getWorld();
        int validaNivel;
        if(band3==false)
        {
            chocaPelota();
            checaTiempo();
            mueve();
            choca();
        }
        else
        {
            mundo.remove();
            validaNivel=mundo.regrasaNumNivel();
            validaNivel++;
            mundo.actualizaNivel(validaNivel);
            mundo.actualizaActivo(true);
           
        }
          
    } 
       /**
   * En este metodo mueve a el jugador en el mundo
 */
    public void mueve()//Valida la tecla presionada y muestra la imagen de el jugador por la tecla seleccionada
    {
        chavo chavo;
        int x=getX(),y=getY();
        int inc=2; // incremento de desplazamiento del jugador
        Mundo mundo=(Mundo)getWorld();
        chavo= mundo.regresaChavo();
        globo g;
        g=new globo();
        
        
        this.cargaImagen();//carga imagenes de jugador
      if(band==false&&quitaLet==1)//valida si el tiempo de choque llego a cero y quita letrero de tiempo y lo reinicia
      {
          mundo.removeObject(t);
          t=new Tiempo(1,3);
          
      } 
       if(band2==false&&quitaLet==1)//valida si el tiempo de tira trampa  llego a cero y quita letrero de tiempo y lo reinicia
      {
          mundo.removeObject(t2);
          t2=new Tiempo(5,5);
          band=false;
          quitaLet=0;
          
      } 
      if(band2==false&&quitaLet==0)//valida si se preciona la tecla t y tira trampa
      {
           if(Greenfoot.isKeyDown("t"))
           {
               if(getX()<26)
               {
                   mundo.addObject(g,getX(),getY()+20);
                   mundo.addObject(t2,g.getX()+100,g.getY());
               }
               else
               { 
                   if(getX()>560)
                   {
                       mundo.addObject(g,getX(),getY()+20);
                       mundo.addObject(t2,g.getX()-100,g.getY());
                    }
                    else
                       mundo.addObject(g,getX(),getY()+20);
                       mundo.addObject(t2,g.getX(),g.getY());
               }
                    
                
                band2=true;
           }
      }
      
      if(band==false)//Valida si badera de congelacion es igual a falso no se puede mover el jugador
       {
        if(Greenfoot.isKeyDown("right"))
        {
            if(x>=579)
            { 
                x=0;
                setLocation(x,y);
                setImage(imagen[1]);
            }
            else
            {
                 setLocation(x+inc,y);
                 setImage(imagen[1]);
                 
            }
   
        }
         if(Greenfoot.isKeyDown("left"))
        {
            if(x<=1)
            {
                x=580;
                setLocation(x,y);
            }
            else
            {
                 setLocation(x-inc,y);
                setImage(imagen[2]);
            }

        }
         if(Greenfoot.isKeyDown("up"))
        {
            if(getY()<86)
           {
              setImage(imagen[3]);
              setLocation(getX(),getY());  
           }
           else
           {
              setImage(imagen[3]);
              setLocation(getX(),getY()-2);
            }
           
        }
        if(Greenfoot.isKeyDown("down"))
        {
            
          if(getY()>367)
           {
              setImage(imagen[4]);
             setLocation(getX(),getY());  
           }
           else
           {
              setImage(imagen[4]);
             setLocation(getX(),getY()+2);
           }
           
        }
       
       }
       else
            setLocation(getX(),getY());//Si bandera de congelacion es verdadera el jugador se queda en la misma posicion
        
    }
    /**
   * Carga imagenes en un arreglo de movimiento del jugador
 */
    public void cargaImagen()//Metodo carga total de imagenes de jugador
    {
        imagen[1]=new GreenfootImage("der.png");
        imagen[2]=new GreenfootImage("izq.png");
        imagen[3]=new GreenfootImage("tras.png");
        imagen[4]=new GreenfootImage("chavo.png");
    }
      /**
   *Checa con que otro objeto se intersecta el objeto
 */
    public void choca() //este metodo checa si se intersecta con el chavo o don ramon
    {
        Actor act;
        Mundo mundo;
        Tiempo t1;//tiempo actual chavo
        mundo=(Mundo)getWorld();
        t1=mundo.regresaTiempoChavo();
       
        act=getOneObjectAtOffset(0,0,kiko.class);
            
        if(act!=null)//si jugador se intersecat con el enemigo kiko  se le asigna un tiempo de congelacion y no podra moverse
        {
            band=true;
            mundo.addObject(t,getX(),getY());
          
        }
        act=getOneObjectAtOffset(0,0,nono.class);//si jugador se intersecat con el enemigo nono  se le asigna un tiempo de congelacion y no podra moverse
        if(act!=null)
        {
            band=true;
            mundo.addObject(t,getX(),getY());
            
         
        }
       
    }
       /**
   *Checa el objeto de esta clase choca con un objeto de la clase pelota
 */
    public void chocaPelota()
    {
        Actor act;
        Mundo mundo;
        Tiempo t1;//tiempo actual chavo
        mundo=(Mundo)getWorld();
        t1=mundo.regresaTiempoChavo();
        
        act=getOneObjectAtOffset(0,0,pelota.class);//si jugador se intersecat con el enemigo nono  se le asigna un tiempo de congelacion y no podra moverse
        if(act!=null)
        {
           
            mundo.removeObject(act);
            t1.incrementaTiempo(10);

        }
    }
       /**
   * Checa el tiempo de juego y valida para teminar nivel o volverlo a pasar
 */
    public void checaTiempo()//valida si el tiempo de juego de chavo es igual a cer gana la partida
    {
        long tchavo,tdon,tconge;//variables para guardar el estado de tiempo en el que se encuentra el chavo y don ramon
        Letrero let;
        let = new Letrero("GANASTE.....");
        Mundo mundo;
        mundo = (Mundo)getWorld();
        Tiempo t1,t2,t3;
        
        t1=mundo.regresaTiempoDonramon();//Regresa el objeto de tiempo don Ramon
        t2=mundo.regresaTiempoChavo();//Regresa el objeto de tiempo chavo
        t3=mundo.regresaTiempoConge();
        
        tconge=t3.regresaTiempo();
        tchavo= t2.regresaTiempo();// Regresa de la clase tiempo el valor actual de tiempo chavo
        tdon=t1.regresaTiempo();// Regresa de la clase tiempo el valor actual de tiempo chavo
        
        
        if(tchavo==0 && tdon>0)//sompara los tiempos actuales de chavo y don ramon  
        {
            mundo.addObject(let,200,200);
           
            band3=true;
        }
        
       
      
    }
       /**
   * Este metodo actualiza la bandera de moviemiento de este objeto
   * @param b  bandera que se utiliza para remover algunos letrero
   * @param cont bandera que se utiliza para remover algunos letrero
 */
    public void actualizaBand(boolean b,int cont)//Actualiza las banderas de los dos contadores
    {
        band=b;
        band2=b;
        quitaLet=cont;//Se checa cuando tiempo de congelacion es igual a cero y se hace cero desde la clase tiempo 
        
    }
   
        
        
  
}

